
/**
 * 1、两数之和
 * 
 * 给定一个整数数组 nums 和一个目标值 target，请你在该数组中找出和为目标值的那 两个 整数，并返回他们的数组下标。
 * 你可以假设每种输入只会对应一个答案。但是，你不能重复利用这个数组中同样的元素。
 */

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
var twoSum = function(nums, target) {
    if(nums.length < 2) {
        return [];
    } else {
        let firstIndex = -1, secondIndex = -1;
        for(let i = 0; i < nums.length - 1; i++) {
            for(let j = i+1; j < nums.length; j++) {
                if(nums[i] + nums[j] === target){
                    firstIndex = i;
                    secondIndex = j;
                    break;
                } 
            }
            if(secondIndex > -1) {
                break;
           }
        }
        if(firstIndex > -1) {
            return [firstIndex, secondIndex];
        } else {
            return [];
        } 
    }
};


/**
 * 2、两数相加
 * 
 * 给出两个 非空 的链表用来表示两个非负的整数。
 * 其中，它们各自的位数是按照 逆序 的方式存储的，并且它们的每个节点只能存储 一位 数字。
 * 如果，我们将这两个数相加起来，则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外，这两个数都不会以 0 开头。
 */

/**
 * Definition for singly-linked list.
 * function ListNode(val) {
 *     this.val = val;
 *     this.next = null;
 * }
 */

function ListNode(val) {
    this.val = val;
    this.next = null;
}

/**
 * @param {ListNode} l1
 * @param {ListNode} l2
 * @return {ListNode}
 */
var addTwoNumbers = function(l1, l2) {    
   let nextNode1 = l1, nextNode2 = l2;
    let remainder = 0;
    let result = null;
    let nextNode = null;
    while(nextNode1 || nextNode2) {
        const a = nextNode1 ? nextNode1.val : 0;
        const b = nextNode2 ? nextNode2.val : 0;
        let node = nextNode1 || nextNode2;
        node.val = a + b + remainder >= 10 ? a + b + remainder - 10 : a + b + remainder;
        if(nextNode) {
            nextNode.next = node;
        } else {
            result = node;
        }
        remainder = a + b + remainder >= 10 ? 1 : 0;
        nextNode = node;
        nextNode1 = nextNode1 !== null ? nextNode1.next : null;
        nextNode2 = nextNode2 !== null ? nextNode2.next : null;
    }
    if(remainder === 1) {
        nextNode.next = new ListNode(parseInt(1));
    }
    return result;
};


